package org.ala.tiktools.rpc.kcp.protocol;

import org.ala.tiktools.rpc.kcp.protocol.segment.KcpSegment;
import org.ala.tiktools.tools.queue.IQueue;

/**
 *	发送端队列
 *
 *	@author ala
 *	@date 2025年4月26日
 */
public interface IKcpSenderQueue extends IQueue<KcpSegment> {
	
	
	/**
	 * 	元素数量
	 */
	int size();
	/**
	 * 	是否为空
	 */
	boolean isEmpty();
	
	
	/**
	 * 	处理已经确认收到的una
	 * 	<p>	直接删小于una的
	 */
	int parseUna(long una);

	/**
     *  确认sn号
     *  <p>	删除sn号的seg
     *  <p>	队列中的sn号是升序的
     *  <p>	从头开始搜：O(n)
     *  <p>	实际场景中大概率消息是顺序过来的，没必要为了兼容抖动每次都log(n)
     */
    void parseAck(long sn);

    /**
     *  处理fastack
     *  <p>	小于 ackSn 的seg，其fastAck自增一次
     *  <p>	如果遍历到了 > ackSn，不用遍历了
     *  <p> sndBuf中 < ackSn 的 消息，fastAck标记累加一次
     */
    void parseFastack(long ackSn);
}
